<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>进度条</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        #progress {
            width: 750px;
            height: 40px;
            margin: 100px auto;
            position: relative;
        }

        #progress_bar {
            width: 700px;
            height: 100%;
            background-color: #ccc;
            position: relative;
            border-radius: 5px;
        }

        #progress_bar_flg {
            width: 25px;
            height: 50px;
            background-color: red;
            position: absolute;
            left: 0px;
            top: -5px;
            border-radius: 5px;
        }

        #progress_bar_value {
            width: 0px;
            height: 100%;
            background-color: red;
            position: absolute;
            left: 0;
            top: 0;
            border-radius: 5px 0 0 5px;
        }

        #progress_value {
            position: absolute;
            right: 0;
            top: 0;
            height: 100%;
            line-height: 40px;
        }
    </style>
</head>

<body>
    <div id="progress">
        <!--进度条-->
        <div id="progress_bar">
            <!--拖动按钮-->
            <span id="progress_bar_flg"></span>
            <span id="progress_bar_value"></span>
        </div>
        <!--进度值-->
        <span id="progress_value">0%</span>
    </div>

    <script src="../jquery.min.3.4.1.js"></script>
    <script>
        $('#progress_bar_flg').mousedown(function (e) {
            // console.log('123');
            var x = e.pageX - $(this).offset().left;
            // console.log(x);
            $(this).on('mousemove', function (e) {
                $(this).css({ left: e.pageX - x - $(this).parent().offset().left });
                if ($(this).offset().left <= $(this).parent().offset().left) {
                    $(this).css({ left: 0 });
                }
                if ($(this).offset().left >= $(this).parent().offset().left + $(this).parent().width() - $(this).width()) {
                    $(this).css({ left: $(this).parent().width() - $(this).width() });
                }

                $(this).siblings().css({ width: $(this).offset().left - $(this).parent().offset().left });
                $('#progress_value').html(Math.round($('#progress_bar_value').width() / ($(this).parent().width() - $(this).width()) * 100) + '%')
            })
        })
        $('#progress_bar_flg').mouseup(function (e) {
            $('#progress_bar_flg').off('mousemove');
        });

        $('#progress_bar').on('click', function (e) {
            // console.log(1);
            var x = e.pageX - $(this).offset().left - $(this).children().eq(0).width() / 2;
            $(this).children().eq(0).css({ left: x });
            if ($(this).children().eq(0).offset().left >= $(this).offset().left + $(this).width() - $(this).children().eq(0).width()) {
                $(this).children().eq(0).css({ left: $(this).width() - $(this).children().eq(0).width() });
            }
            $(this).children().eq(1).css({ width: $(this).children().eq(0).offset().left - $(this).offset().left });
            $('#progress_value').html(Math.round($('#progress_bar_value').width() / ($(this).width() - $(this).children().eq(0).width()) * 100) + '%')
        })
    </script>
</body>

</html>